package cn.stacey.day08;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.Test;

import cn.stacey.day07.Employee;

public class DemoListSort {
	@Test
	public void testSort() {

		int[] score = { 20, 70, 78, 10, 90 };
		Arrays.sort(score);
		System.out.println(Arrays.toString(score));
		// 如果是字符串会按照字母顺序排序，如果需要通过长度排(需要自定义规则)
		String[] str = { "aaa", "asdd", "zx" };
		Arrays.sort(str, new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				return 0;
			}

		});

	}

	@Test
	public void testSort1() {
		List<String> list = Arrays.asList("C++", "swift", "java");
		Collections.sort(list);
		for (String item : list) {
			System.out.println(item);
		}

		List<Employee> list1 = Arrays.asList(new Employee("java", 20), new Employee("C++", 19),
				new Employee("Eclipse", 23)

		);

		// 直接写下面会报错，Employee没有实现Comparator接口
		// 实现自定义元素集合排序，两种方式
		// 第一种sort的时候提供一个比较器
		// 如果是字符串会按照字母顺序排序，如果需要通过长度排(需要自定义规则)
		// 匿名内部类需要马上实现他的抽象方法？
		Collections.sort(list1, new Comparator<Employee>() {
			// 根据年龄排序
			@Override
			public int compare(Employee o1, Employee o2) {
				// TODO Auto-generated method stub
				// 左边o1比右边o2大，返回1，排到后面去
				// if(o1.getAge()>o2.getAge()) {
				// return 1;
				// }else if(o1.getAge()<o2.getAge()) {
				// return -1;
				// }
				// return 0;
				// 也可以直接用一句话
				return o1.getAge() - o2.getAge();
			}

		});
		for(Employee item:list1);
		System.out.println(list1);

		// 根据名字排序,
		Collections.sort(list1, new Comparator<Employee>() {

			@Override
			public int compare(Employee o1, Employee o2) {
				// TODO Auto-generated method stub
				// 因为字符串已经实现了compareTo方法
				return o1.getName().compareTo(o2.getName());
			}

		});
		for(Employee item:list1) {
		System.out.println(item);
		}
		
		//让元素Employee实现comparable接口
		Collections.sort(list1);
		for(Employee item:list1) {
			System.out.println(item);
		}
	}
}
